// 这个用来axios封装的
// 引入 axios
import axios from 'axios'



// 设置请求方式请求头 设置不设置都可以,get请求默认就是这个请求头
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
axios.defaults.headers["Authorization"] = window.sessionStorage.getItem('token');
// console.log(window.sessionStorage.getItem('token'));

// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项，请求URL公共部分
	baseURL: 'http://www.tangxiaoyang.vip:8888/api/v2/',  // 使用的时候注意替换成自己地址
	// 配置超时时间
	timeout: 10000
})

//请求拦截  发请求的时候进行拦截  主要使用在请求时挈带token
service.interceptors.request.use(config => {
	// console.log(config.method);
	// console.log(config);
	// 配置 post请求专属的请求头, 如果后台参数没有要求,不可以不进行配置
	if (config.method === 'post') {
		config.headers["Content-Type"] = "application/x-www-form-urlencoded";
		// config.headers["Authorization"] = window.sessionStorage.getItem('token');
		// config.headers["token"] = window.sessionStorage.getItem('token');
		// config.headers.common['Authorization'] = 'Bearer ' + store.state.token
	}
	// get请求映射params参数
	if (config.method === 'get' && config.data) {
		// console.log(config.params);
		// console.log(config.data);
		let url = config.url + '?';
		for (const propName of Object.keys(config.data)) {
			const value = config.data[propName];
			var part = encodeURIComponent(propName) + "=";
			if (value !== null && typeof (value) !== "undefined") {
				if (typeof value === 'object') {
					for (const key of Object.keys(value)) {
						if (value[key] !== null && typeof (value[key]) !== 'undefined') {
							let params = propName + '[' + key + ']';
							let subPart = encodeURIComponent(params) + '=';
							url += subPart + encodeURIComponent(value[key]) + '&';
						}
					}
				} else {
					url += part + encodeURIComponent(value) + "&";
				}
			}
		}
		url = url.slice(0, -1);
		config.params = {};
		config.url = url;
	}
	return config
}, error => {
	// 请求错误处理
	Promise.reject(error)
})

// 响应拦截  主要是对返回的参数进行统一的处理
service.interceptors.response.use(res => {
	// 这里就是请求成功时候后台返回的参数, 我这里没有进行其他操作就直接把数据给返回出去了
	// 有需要的话可以进行对数据的简单操作,例如 判断token是否勾起之类的
	return res.data
}, error => {
	// 请求失败处理.道理同上
	// 我这里也是没有进行处理
	return Promise.reject(error)
})
// 记得暴露出去,不然白写这么多了

export default service